home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 October
/
EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso
/
Aminet
/
dev
/
m2
/
ModGen.lha
/
ModGen
/
ModGen.dok
< prev
next >
Wrap
Text File
|
1995-04-20
|
11KB
|
260 lines
Dokumentation zum Programm
______
/| /| / /
/ | / | ____ ____ / / ____ ____ ____
/ | / | / / / / / / /___/ / /
/ |/ | /____/ /____/ /_____/ /___ / / V1.0
(c) 1995 by Frank Lömker
E-Mail: floemker@techfak.uni-bielefeld.de
ModGen basiert direkt auf
- OG V37.11 von Thomas Igracki und
- GenOberon V1.0 von Kai Bolay und Jan van den Baard.
Copyright:
~~~~~~~~~
Das Programm ist Freeware. Es darf frei kopiert werden. Es ist aber nicht
erlaubt, es zu kommerziellen Zwecken zu benutzen. Dazu gehört auch ein
Diskettenpreis von über 5 DM ! Änderungen müssen dokumentiert werden.
Libraries:
~~~~~~~~~
Das Programm benötigt die folgenden externen Libraries:
- reqtools.library V38 ( (c) by Nico François )
- nofrag.library V2 ( (c) by Jan van den Baard )
- gadtoolsbox.library V39 ( (c) by Jan van den Baard )
Sollen gepackte Dateien geladen werden, wird die Library
- powerpacker.library V35 ( (c) by Nico François )
benötigt.
Programm:
~~~~~~~~
Das Programm ModGen ist ein Modula SourceCodeGenerator für GadToolsBox ab
Version 2.0. Es erzeugt Code für den Compiler Turbo Modula-2 V1.40 von
Amritpal Mann.
Von der Workbench können ModGen bis zu 3 Parameter übergeben werden. Der 1.
Parameter ist das zu konvertierende GUI-File, der 2. der Name des zu erzeu-
genden Sourcecodes und der 3. der Name des zu erzeugenden Sourcecodes für
den Screen, falls hierfür eine Extradatei angelegt werden soll.
Von der Shell sieht der Aufruf wie folgt aus:
Format: ModGen [<GUIFile>] [<DestFile>] [<ScreenFile>] [OPENFONT]
[SYSFONT] [RASTER] [UNDERMOUSE] [PORT] [ICON] [NOGUI]
[OPT OSRUPI]
Schablone: NAME,TO=AS,SCREEN,OPENFONT/S,SYSFONT/S,RASTER/S,UNDERMOUSE/S,
PORT/S,ICON/S,NOGUI/S,OPT/K
Die ersten 3 Parameter ([<GUIFile>] [<DestFile>] [<ScreenFile>]) sind da-
bei identisch zu den Workbench-Parametern.
NOGUI bewirkt, das kein Fenster geöffnet wird. Wird NOGUI nicht angege-
ben, werden die restlichen Optionen (OPENFONT - ICON bzw. OPT) ignoriert.
Die einzelnen Optionen bewirken:
OPENFONT oder OPT O
Ist die Option "Font Adaptive" bei den Preferences von GadToolsBox
für das GUI-File nicht gewählt und wird ein DiskFont benutzt, wird
auch Code erzeugt, der den Font öffnet und schließt.
SYSFONT oder OPT S
Ist die Option "Font Adaptive" bei den Preferences von GadToolsBox
für das GUI-File gewählt, bewirkt die Angabe dieser Option, daß der
System Default Font benutzt wird. Wird die Option nicht angegeben,
wird der Screen Font benutzt.
RASTER oder OPT R
Die generierten Fenster werden mit einem Raster gefült, das auch von
GadToolsBox und den AutoRequestern der Workbench benutzt wird (und
auch von ModGen).
UNDERMOUSE oder OPT U
Die generierten Fenster werden unter der Maus geöffnet.
PORT oder OPT P
Für die generierten Fenster wird nur ein MessagePort angelegt.
Die Messages können also für alle Fenster an diesem einen Port
abgefragt werden.
ICON oder OPT I
Die generierten Dateien werden, falls sie noch kein Icon hatten, mit
dem Icon "Modula:Icons/txt" gespeichert.
Wird NOGUI nicht angegeben oder wird das Programm über die Workbench ge-
started, werden zuerst die Preferences (die Einstellungen der Optionen
OPENFONT - ICON) aus der Datei "ENV:GadToolsBox/GenMod.prefs" geladen. Da-
nach wird ein Fenster geöffnet, über das das Programm gesteuert wird. Die
Einstellungen sind hier:
Source, Dest, Screen
Die hier einzugebenden Namen entsprechen den 3 Parametern von der
Workbench. Mit den kleinen Gadgets neben den Stringgadgets wird ein
Filerequester geöffnet, über den der jeweilige Name per Maus gewählt
werden kann.
Preferences
Hier können die gleichen Optionen ein- bzw. ausgeschaltet werden, die
auch von der Shell angegeben werden können (siehe oben).
Windows
Hier werden, nachdem bei Source ein GUI-File angegeben wurde, die ge-
nerierten Fenster und der Screen aufgelistet. Soll nur ein Teil des
Codes erzeugt werden, kann hier der Bereich gewählt werden.
from
Ist dieses Gadget aktiv, kann bei den Windows die erste Grenze des Be-
reiches gewählt werden, der abgespeichert werden soll.
to
Ist dieses Gadget aktiv, kann bei den Windows die zweite Grenze des Be-
reiches gewählt werden, der abgespeichert werden soll.
All
Wird dieses Gadget gewählt, wird der komplette Sourcecode (alle Windows
und der Screen) in der Datei <Dest> erzeugt.
Selected
Wird dieses Gadget gewählt, wird Sourcecode für den bei from und to
ausgewählten Bereich erzeugt. Ist hier der Screen enthalten, wird die-
ser unter dem Namen <Screen> gespeichert, der restliche Code wird in
der Datei <Dest> abgelegt. Dieser Code imporiert den Teil für den
Screen aus der Datei <Screen>, so daß der Name auch nötig ist, wenn der
Screen nicht gespeichert wird.
SavePref
Hier werden die Preferences in den Dateien
"ENV:GadToolsBox/GenMod.prefs" und "ENVARC:GadToolsBox/GenMod.prefs"
abgespeichert.
About
Es werden Informationen über das Programm angezeigt.
Quit und Closegadget
Das Programm wird beendet.
Generierter Code:
~~~~~~~~~~~~~~~~
Wird das GETFILE-Gadget benutzt, imporiert der generierte Code das Modul
GetFile. Beim Linken muß dann das Objektfile "InitGetC.o" mit angegeben
werden. Dieses enthält den Dispatcher für das BOOPSI-Image.
Ab hier bedeuten:
<Project-Name> Name, der im Edit Data Requester vom Windowmenu eingegeben
wurde
<Gadget-Label> Name, der in einem Label Gadget von einem der Gadget Kind
Requester eingegeben wurde
<Menu-Label> Name, der im Label Gadget vom Menu Editor eingegeben wurde
An exportierten Routinen werden generiert:
PROCEDURE SetupScreen (): INTEGER , bei einem Customscreen und der Workbench
PROCEDURE SetupScreen (pub:y.ADDRESS): INTEGER bei einem Publicscreen
Diese Procedure öffnet bzw. locked den Screen und besorgt seinen Visual
Info. Auf verlangen wird der benutzte Font geöffnet. Wird ein GETFILE-
Gadget benutzt, wird auch die Initialisierung des BOOPSI Image getestet.
Diese Routine befindet sich im File <Screen>, wenn beim generieren des
Codes Selected gewählt wurde.
Die RETURN Codes:
0 kein Fehler.
1 Konnte Screen nicht öffnen bzw. locken.
2 Konnte Visual Info nicht bekommen.
3 Konnte Font nicht öffnen.
4 Konnte BOOPSI Image nicht initialisieren.
PROCEDURE CloseDownScreen;
Diese Procedure gibt die Resourcen von SetupScreen frei. Diese Routine
muß auch dann aufgerufen werden, wenn SetupScreen einen Fehler gemeldet
hat.
Diese Routine befindet sich im File <Screen>, wenn beim generieren des
Codes Selected gewählt wurde.
PROCEDURE Create<Project-Name>Gadgets (): INTEGER;
Für jedes generierte Fenster mit Gadgets gibt es eine dieser Routinen.
Diese Routinen legen die Gadgets an.
Die RETURN Codes:
0 Kein Fehler.
1 Konnte Gadget Context nicht anlegen.
2 Konnte Gadgets nicht anlegen.
7 Konnte BOOPSI Image nicht initialisieren.
8 CloneTagItems nicht möglich.
PROCEDURE Open<Project-Name>Window (createGads: BOOLAN): INTEGER;
bei einem Fenster mit Gadgets
PROCEDURE Open<Project-Name>Window (): INTEGER;
bei einem Fenster ohne Gadgets
Für jedes generierte Fenster gibt es eine dieser Routinen. Diese Routinen
legen die Gadgets (falls verlangt und vorhanden) und die Menues an und
öffnen die Fenster.
Die RETURN Codes:
0 Kein Fehler.
1 Konnte Gadget Context nicht anlegen.
2 Konnte Gadgets nicht anlegen.
3 Konnte Menues nicht anlegen.
4 LayoutMenus nicht möglich.
5 Konnte SystemFont nicht öffnen (bei Option SYSFONT).
6 SetMenuStrip nicht möglich.
7 Konnte BOOPSI Image nicht initialisieren.
8 CloneTagItems nicht möglich.
20 Konnte Fenster nicht öffnen.
PROCEDURE Close<Project-Name>Window;
Für jedes generierte Fenster gibt es eine dieser Routinen.
Diese Procedure gibt die Resourcen von Open<Project-Name>Window frei.
Diese Routine muß auch dann aufgerufen werden, wenn
Open<Project-Name>Window einen Fehler gemeldet hat.
PROCEDURE <Project-Name>Render;
Für jedes generierte Fenster, das IntuiTexte oder BevelBoxen enthält oder
für das die Option RASTER an war, gibt es eine dieser Routinen, die die
Texte und BevelBoxen anzeigen und den Hintergrund neu generieren. Diese
Routine muß vom Hauptprogramm aufgerufen werden, wenn es die Message
REFRESHWINDOW am Windowport erhält. Dies muß zwischen den Aufrufen von
GT_BeginRefresh und GT_EndRefresh geschehen. Ein Beispiel:
IF REFRESHWINDOW <= Class THEN
GT_BeginRefresh (<Project-Name>Wnd);
<Project-Name>Render;
GT_EndRefresh (<Project-Name>Wnd,TRUE);
END;
Weiterhin werden folgende globalen Variablen und Konstanten angelegt:
Die Variablen Scr, VisualInfo, Font, Attr und Topaz80 befindet sich im
File <Screen>, wenn beim generieren des Codes Selected gewählt wurde.
Scr: I.ScreenPtr; Zeiger auf den geöffneten bzw. gelockten Screen
VisualInfo: y.ADDRESS; Zeiger zum Visual Info des Screens
Die folgenden Variablen werden nur angelegt, wenn Gadgets bzw. Menues
existieren, wenn der benutzte Font geöffnet wird bzw. wenn das Fenster ein
ZoomGadget hat:
<Project-Name>GList: I.GadgetPtr; Die generierten Gadgets
<Project-Name>Menus: I.MenuPtr; Die Menues
<Project-Name>Zoom: ARRAY [0..3] OF INTEGER; 2. Fensterposition
Topaz80: g.TextAttr;
Attr: g.TextAttr; Der geöffnete Font
Font: g.TextAttrPtr; Zeiger auf geöffneten Font
Für jedes Fenster wird ein Zeiger auf das Fenster angelegt:
<Project-Name>Wnd: I.WindowPtr;
Die Fensterposition und Größe wird in den folgenden Variablen abgelegt:
<Project-Name>Left Linke Ecke
<Project-Name>Top Obere Ecke
<Project-Name>Width Breite
<Project-Name>Height Höhe
Diese werden im Hauptteil des generierten Modules initialisiert.
Die Zeiger auf die Gadgets für jedes Fenster werden in folgenden Arrays
angelegt:
<Project-Name>Gadgets: ARRAY [0..<Project-Name>CNT-1] OF I.GadgetPtr;
Die Konstante <Project-Name>CNT gibt dabei die Anzahl der Gadgets in dem
jeweiligen Fenster an.
Um auf die Zeiger in dem Array zuzugreifen, werden die folgenden Konstanten
erzeugt, die die Position des Gadgets in dem Array angeben:
GD<Gadget-Label>
Die unterstrichenen Buchstaben aller Gadgets werden in dem String
<Project-Name>HotKeys angegeben.
Neucompilierung:
~~~~~~~~~~~~~~~
Compiliert werden kann ModGen folgendermaßen:
m2b ModGen gtxs.lib nofrags.lib rqtoolss.lib InitGetC.o
Frank